package cn.demo.d01;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        // test31();
        // System.out.println("--------------------------------");
        // test32();
        // System.out.println("--------------------------------");
        // test33();
        // System.out.println("--------------------------------");
        // test34();
        // System.out.println("--------------------------------");
        test35();
        System.out.println("--------------------------------");
    }

    /**
     *主方法中通过键盘录入三个整数。定义一个方法，方法接收三个整数变量，在方法中从大到小依次打印三个变量。
     * */
    private static void test31(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入几个整数做排序：");
        int count = sc.nextInt();
        int[] arr = new int[count];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"个整数");
            arr[i] = sc.nextInt();
        }
        printSortArray(arr);
    }

    private static void printSortArray(int[] arr){
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j]<arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for (int i : arr) {
            System.out.print(i+" ");
        }
        System.out.println();
    }

    /**
     定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回
     * */
    private static void test32() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入整数");
        int num = sc.nextInt();
        int count = 0;
        while (num!=0){
            num /= 10;
            count++;
        }
        System.out.println(count);
    }

    /**
     需求： 定义一个方法fill(int[] arr,int fromIndex,int toIndex,int value)
     功能： 将数组arr中的元素从索引fromIndex开始到toIndex（不包含toIndex）对应的值改为value
     * */
    private static void test33() {
        int[] arr = {12,23,34,45,56,67,78,89,90};
        changeArrVal(arr,3,6,666);
    }

    private static void changeArrVal(int[] arr,int fromIndex,int toIndex,int value){
        for (int i = fromIndex; i < toIndex; i++) {
            arr[i] = value;
        }
        for (int i : arr) {
            System.out.print(i+" ");
        }
        System.out.println();
    }

    /**
     需求1： 定义一个方法copyOf(int[] arr, int newLength)
     功能： 将数组arr中的newLength个元素拷贝到新数组中，并将新数组返回，从索引为0开始

     需求2： 定义一个方法copyOfRange(int[] arr,int from, int to)
     功能： 将数组arr中从索引from（包含from）开始，到索引to结束（不包含to）的元素复制到新数组中，并将新数组返回。
     * */
    private static void test34() {
        int[] arr = {12,23,34,45,56,67,78,89,90};
        int[] newArr = copyArrLength(arr,5);
        System.out.println("需求1: "+Arrays.toString(newArr));
        System.out.println("old: "+Arrays.toString(arr));
        int[] newArr2 = copyOfRange(arr,2,5);
        System.out.println("需求2: "+Arrays.toString(newArr2));
    }

    private static int[] copyArrLength(int[] arr,int newLength){
        int[] newArr = new int[newLength];
        for (int i = 0; i < newLength; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

    private static int[] copyOfRange(int[] arr,int from, int to){
        int[] newArr = new int[to-from];
        for (int i = 0; i < newArr.length; i++) {
            newArr[i] = arr[from];
            from++;
        }
        return newArr;
    }

    /**
     一个大V直播抽奖，奖品是现金红包，分别有{2,588,888,1000,10000}五个奖金。
     请使用代码模拟抽奖，打印出每个奖项，奖项的出现顺序要随机且不重复。
     打印效果如下：（随机顺序，不一定是下面的顺序）
     888元的奖金被抽出
     588元的奖金被抽出
     10000元的奖金被抽出
     1000元的奖金被抽出
     2元的奖金被抽出

     ### 训练提示
     1. 奖项要随机出现，但奖金不是连续的数字，不能被随机产生。能随机产生的只有数组的索引了，可以使用随机索引来代表随机元素。因为索引和元素是一一对应的，
     2. 哪些奖被抽过了，哪些奖没有被抽过，要定义一个数组来存放已经被抽过的奖项。
     3. 每个奖项只能被抽出一次，要写一个方法来控制奖项不重复。
     * */
    private static void test35() {
        int[] redPackage = {2,588,888,1000,10000};
        Random r = new Random();
        for (int i = 0; i < redPackage.length; i++) {
            int index = r.nextInt(redPackage.length);
            int temp = redPackage[i];
            redPackage[i] = redPackage[index];
            redPackage[index] = temp;
        }
        for (int i : redPackage) {
            System.out.println(i+"元的奖金被抽出");
        }
    }
}

